// 子模块moduleA路径：store/modules/moduleA.js 
export default {
    // 命名空间
    namespaced: true,
    state: {
        // 如果本地有值就获取，如果没有值就空数组
        list: uni.getStorageSync('hmyg-cart') || []
    },
    getters: {
        // 计算出全部商品的购买的数量 
        totalNums(state) {
            // 数组的方法reduce
            let nums = 0;
            state.list.forEach((v) => (nums += v.num))
            return nums
            // return state.list.reduce((s, v) => s + v.num, 0)
        },

        // 选中商品的列表,遍历数组，拿到选中的商品
        checkedGoodsCart(state) {
            return state.list.filter((v) =>
                v.checked
            )
        },

        // 勾选了商品的总价
        checkedCartPrice(state, getters) {
            // 单价 * 数量
            return getters.checkedGoodsCart.reduce((s, v) => s + v.num * v.goods_price, 0)
        },
        // 勾选了商品的总数量 
        checkedCartNums(state, getters) {
            return getters.checkedGoodsCart.reduce((s, v) => s + v.num, 0)

        },

        // 根据商品数组选中状态实现全选
        allCheck(state, getters) {
            // 判断 购物车数组长度 和 选中商品的数组长度是否相等
            // 相等 全选 不相等就不全选

            // 排除掉 都是 0 的情况
            // 当全部商品删除后，商品的数组长度为0，0就是false,return false 回去  就取消全选
            return (state.list.length && state.list.length === getters.checkedGoodsCart.length)
        }
    },
    mutations: {
        // 购物车添加商品
        addGoods(state, payload) {
            // payload = goodsDetail
            // 判断商品是否存在这个数组中
            // findIndex:找到就返回数组下标，找不到就返回 -1
            // v 就是 list 中的每一个对象
            const index = state.list.findIndex((v) => v.goods_id === payload.goods_id)
            if (index === -1) {
                // 返回-1就是没有购买过
                // 新增商品
                state.list.push({
                    ...payload,
                    num: 1,
                    checked: true
                })
            } else {
                //在这个数组里找到就返回下标，通过这个数组返回的下标再
                // 点list里面的num++
                //  已经购买过的就+1 
                state.list[index].num++
            }
            console.log(state.list);
            // 将购物车的数量数据，做永久性保存到本地
            uni.setStorageSync('hmyg-cart', state.list);
        },
        //点击切换复选框选中按钮
        toggleGoodsCheck(state, payload) {
            // 取反
            state.list[payload].checked = !state.list[payload].checked
            // 永久保存
            uni.setStorageSync('hmyg-cart', state.list);
        },
        // 全选按钮，控制商品选中状态
        toggleAllCheck(state, payload) {
            // console.log(this);
            // 先获取当前的全选状态（在getters中）取反
            const allCheck = !this.getters['cart/allCheck']
            // 遍历购物车数组把商品的选中状态 赋值给每个商品
            state.list.forEach((v) => v.checked = allCheck)
            // 永久保存
            uni.setStorageSync('hmyg-cart', state.list);
        },
        // 商品数量的改变
        numChange(state, payload) {
            //   payload =  payload:{ index, num }
            // index是点击当前商品下标;
            // num: 是 num  区分 点击  + （1） 还是 - （-1）
            state.list[payload.index].num += payload.num
            // 永久保存
            uni.setStorageSync('hmyg-cart', state.list);
        },
        // 删除商品
        deleteGoods(state, index) {
            // 通过下标，删除一个元素
            state.list.splice(index, 1)
            // 永久保存
            uni.setStorageSync('hmyg-cart', state.list);
        }

    },
    actions: {

    }
}